package structure.AdapterPattern.introduce.demo;

/**
 * 适配器模式
 *
 * 我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类 AudioPlayer。
 * 默认情况下，AudioPlayer 可以播放 mp3 格式的音频文件。
 *
 * 我们还有另一个接口 AdvancedMediaPlayer 和实现了 AdvancedMediaPlayer 接口的实体类。
 * 该类可以播放 vlc 和 mp4 格式的文件。
 *
 * 我们想要让 AudioPlayer 播放其他格式的音频文件。
 * 为了实现这个功能，我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter，并使用 AdvancedMediaPlayer 对象来播放所需的格式。
 * */
public class AdapterPattern{
    public static void main(String[] args) {
        AudioPlayer audioPlayer = new AudioPlayer();
        audioPlayer.play("MP3");
        audioPlayer.play("VLC");
        audioPlayer.play("MP4");
    }
}

interface MediaPlayer {
    void play(String pam);
}

class AudioPlayer implements MediaPlayer{

    /*@Override
    public void play() {
        System.out.println("播放MP3");
    }*/
    private MediaAdapter mediaAdapter;

    @Override
    public void play(String pam) {
        if("MP3".equals(pam)){
            System.out.println("播放MP3");
        }else {
            mediaAdapter = new MediaAdapter(pam);
            mediaAdapter.play(pam);
        }
    }
}

interface AdvancedMediaPlayer {
    void play();
}

class VLC implements AdvancedMediaPlayer{

    @Override
    public void play() {
        System.out.println("播放VLC");
    }
}

class MP4 implements AdvancedMediaPlayer{

    @Override
    public void play() {
        System.out.println("播放MP4");
    }
}

/**
 * 适配器类 依赖 AdvancedMediaPlayer 实现 MediaPlayer
 * */
class MediaAdapter implements MediaPlayer {

    private AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(String pam){
        if ("VLC".equals(pam)){
            this.advancedMediaPlayer = new VLC();
        }
        if ("MP4".equals(pam)){
            this.advancedMediaPlayer = new MP4();
        }
    }
    @Override
    public void play(String pam) {
        advancedMediaPlayer.play();
    }
}




